package business;

import org.hibernate.Session;
import org.hibernate.Transaction;

import utils.HibernateUtil;
import entities.Boek;
import entities.Genre;

public class BoekWijziger implements IEntityWijziger<Boek>
{
	private Boek boek;
	
	private String titel;
	private String omschrijving;
	private int isbn;
	private boolean uitleenbaar;
	private Genre genre;
	
	// Constructor
	
	public BoekWijziger(Boek boek)
	{
		this.boek = boek;
		titel = boek.getTitel();
		omschrijving = boek.getOmschrijving();
		isbn = boek.getIsbn();
		uitleenbaar = boek.getIsUitleenbaar();
		genre = boek.getGenre();
	}

	// Getters en Setters
	
	public String getTitel()
	{
		return titel;
	}
	public void setTitel(String titel)
	{
		this.titel = titel;
	}
	public String getOmschrijving()
	{
		return omschrijving;
	}
	public void setOmschrijving(String omschrijving)
	{
		this.omschrijving = omschrijving;
	}
	public int getIsbn()
	{
		return isbn;
	}
	public void setIsbn(int isbn)
	{
		this.isbn = isbn;
	}
	public boolean isUitleenbaar()
	{
		return uitleenbaar;
	}
	public void setUitleenbaar(boolean uitleenbaar)
	{
		this.uitleenbaar = uitleenbaar;
	}
	public Genre getGenre()
	{
		return genre;
	}
	public void setGenre(Genre genre)
	{
		this.genre = genre;
	}
	
	// Methoden
	
	@Override
	public void update()
	{
		Session session = null;
		Transaction tx = null;
		
		try
		{
			session = HibernateUtil.getSessionFactory().openSession();
			tx = session.beginTransaction();
			
			boek = (Boek) session.merge(boek); // make sure the entity is unique.
			boek.setGenre((Genre) session.merge(boek.getGenre()));
			
			wijzigAuteur();
			
			session.update(boek);
			
			tx.commit();
		}
		catch(RuntimeException e)
		{
			if(tx != null)
			{
				tx.rollback();
			}
		}
		finally
		{
			if(session != null)
			{
				session.close();
			}
		}
	}

	private void wijzigAuteur()
	{
		boek.setTitel(titel);
		boek.setOmschrijving(omschrijving);
		boek.setIsbn(isbn);
		boek.setIsUitleenbaar(uitleenbaar);
		boek.setGenre(genre);
	}
}
